home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / pbmplus / pgm / pgmtofits.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  3.4 KB  |  115 lines

  1. /* pgmtofits.c - read a portable pixmap and produce a FITS file
  2. **
  3. ** Copyright (C) 1989 by Wilson H. Bent (whb@hoh-2.att.com).
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include "pgm.h"
  14.  
  15. static void putFitsHead ARGS(( int cols, int rows, gray maxval ));
  16. static void write_card ARGS(( char* str ));
  17.  
  18. void
  19. main( argc, argv )
  20. int argc;
  21. char* argv[];
  22.     {
  23.     FILE* ifp;
  24.     gray* grayrow;
  25.     register gray* gP;
  26.     int argn, rows, cols, i, format;
  27.     register int col, row;
  28.     gray maxval;
  29.  
  30.     pgm_init( &argc, argv );
  31.  
  32.     argn = 1;
  33.  
  34.     if ( argn < argc )
  35.     {
  36.     ifp = pm_openr( argv[argn] );
  37.     ++argn;
  38.     }
  39.     else
  40.     ifp = stdin;
  41.  
  42.     if ( argn != argc )
  43.     pm_usage( "[pgmfile]" );
  44.  
  45.     pgm_readpgminit( ifp, &cols, &rows, &maxval, &format );
  46.     if ( maxval > 255 )
  47.     pm_error( "maxval (%d) is greater than maximum of 255", maxval );
  48.     grayrow = pgm_allocrow( cols );
  49.  
  50.     putFitsHead( cols, rows, maxval );
  51.  
  52.     for ( row = 0; row < rows; ++row )
  53.     {
  54.     pgm_readpgmrow( ifp, grayrow, cols, maxval, format );
  55.     for ( col = 0, gP = grayrow; col < cols; ++col, ++gP )
  56.         putchar( *gP );
  57.     }
  58.  
  59.     for ( i = ( rows * cols ) % 2880; i < 2880; ++i )
  60.     putchar( '\0' );
  61.  
  62.     pm_close( ifp );
  63.  
  64.     exit( 0 );
  65.     }
  66.  
  67. #if __STDC__
  68. static void
  69. putFitsHead( int cols, int rows, gray maxval )
  70. #else /*__STDC__*/
  71. static void
  72. putFitsHead( cols, rows, maxval )
  73. int cols, rows;
  74. gray maxval;
  75. #endif /*__STDC__*/
  76.     {
  77.     int i = 0;
  78.     char card[81];
  79.  
  80.     sprintf( card, "SIMPLE  =                    T                                                  " );
  81.     write_card( card ); ++i;
  82.     sprintf( card, "BITPIX  =                    8                                                  " );
  83.     write_card( card ); ++i;
  84.     sprintf( card, "NAXIS   =                    2                                                  " );
  85.     write_card( card ); ++i;
  86.     sprintf( card, "NAXIS1  =           %10d                                                  ", cols );
  87.     write_card( card ); ++i;
  88.     sprintf( card, "NAXIS2  =           %10d                                                  ", rows );
  89.     write_card( card ); ++i;
  90.     sprintf( card, "DATAMIN =           %10d                                                  ", 0 );
  91.     write_card( card ); ++i;
  92.     sprintf( card, "DATAMAX =           %10d                                                  ", (int) maxval );
  93.     write_card( card ); ++i;
  94.     sprintf( card, "BZERO   =                  0.0                                                  " );
  95.     write_card( card ); ++i;
  96.     sprintf( card, "BSCALE  =                  1.0                                                  " );
  97.     write_card( card ); ++i;
  98.     sprintf( card, "HISTORY Created by fitstopgm.                                                   " );
  99.     write_card( card ); ++i;
  100.     sprintf( card, "END                                                                             " );
  101.     write_card( card ); ++i;
  102.     sprintf( card, "                                                                                " );
  103.     while ( i < 36 )
  104.     {
  105.     write_card( card ); ++i;
  106.     }
  107.     }
  108.  
  109. static void
  110. write_card( str )
  111. char* str;
  112.     {
  113.     fwrite( str, sizeof(char), 80, stdout );
  114.     }
  115.